#pragma once
/******************************************************************************/
/* compile/operations.h                                            2015-03-21 */
/* Projet Systèmes Informatiques - INSA Toulouse                 Félix Poisot */
/******************************************************************************/
#include "types.h"
#include "asmfile.h"
/******************************************************************************/

// 'nom' sera free()
TypedAddr declare(Type t, char* nom);
void declare_table(Type t, char* nom, int taille);

// 'nom' sera free(). Renvoie l'adresse de la variable déclarée précédemment.
Addr use_var(char* nom, Type* pType);

// Echec de compilation si pas initialisée (le nom sera retrouvé à partir de l'@).
void chk_init(Addr addr);

void print(TypedAddr a);
TypedAddr affectation(TypedAddr a1, TypedAddr a2, const char* op);
TypedAddr followPtr(TypedAddr a);
TypedAddr binop(asm_Operation op, const char* opName, TypedAddr a1, TypedAddr a2);

// pour ++ et --
TypedAddr unop(asm_Operation op, int post, TypedAddr a);


// Prépare l'organisation finale des segments (différente de l'ordre 
// d'apparition des instructions, pas prévisible avant la fin de la compilation.)
void consolidate();